package cn.schoolwow.quickflow.service.executor.putData;

import cn.schoolwow.quickflow.QuickFlowExecutor;
import cn.schoolwow.quickflow.domain.FlowContextDataOption;
import cn.schoolwow.quickflow.domain.FlowDataFeature;
import cn.schoolwow.quickflow.dto.FlowContextDataRange;

import java.util.Map;

public interface QuickFlowExecutorPutDataOperation {
    /**
     * 设置线程本地数据
     */
    QuickFlowExecutor putThreadLocalData(String key, Object value, FlowDataFeature... flowDataFeatures);

    /**
     * 设置当前流程数据
     */
    QuickFlowExecutor putCurrentFlowData(String key, Object value, FlowDataFeature... flowDataFeatures);

    /**
     * 设置当前复合流程数据
     */
    QuickFlowExecutor putCurrentCompositeFlowData(String key, Object value, FlowDataFeature... flowDataFeatures);

    /**
     * 设置临时数据
     */
    QuickFlowExecutor putTemporaryData(String key, Object value);

    /**
     * 设置流程返回数据
     */
    QuickFlowExecutor putReturnData(String key, Object value);

    /**
     * 设置上下文数据
     */
    QuickFlowExecutor putData(String key, Object value, FlowDataFeature... flowDataFeatures);

    /**
     * 设置全局线程本地数据
     */
    QuickFlowExecutor putContextThreadLocalData(String key, Object value, FlowDataFeature... flowDataFeatures);

    /**
     * 设置全局上下文数据
     */
    QuickFlowExecutor putContextData(String key, Object value, FlowDataFeature... flowDataFeatures);

    /**
     * 设置全局上下文临时数据
     */
    QuickFlowExecutor putContextTemporaryData(String key, Object value);

    /**
     * 设置流程数据
     */
    QuickFlowExecutor putFlowContextData(String key, Object value, FlowContextDataRange flowContextDataRange, FlowDataFeature... flowDataFeatures);

    /**
     * 设置流程数据
     */
    QuickFlowExecutor putFlowContextDataMap(Map<String,Object> dataMap, FlowContextDataRange flowContextDataRange, FlowDataFeature... flowDataFeatures);

    /**
     * 设置流程数据
     */
    QuickFlowExecutor putFlowContextData(FlowContextDataOption flowContextDataOption);

}
